// 用函数来封装
// 对与参数类型是否也可以参数化
// 类型参数化
// 封装一个函数,传入一个参数.并且返回这个参数
function foo(arg: number):number{
    return arg
}
//上面代码实现了但不适用于其他类型如string boolean Person
// 采用any类型
function foo2(arg:any):any{
    return arg
}
// 虽然any可以,但是已经对视了信息拿不到返回的具体类型
//比如我需要函数可以捕获参数类型是number并且使用number来作为返回值的类型
function foo3<Type>(arg:Type):Type{
    return arg
}
// 调用这种函数两种方式
//方式1.通过类型方式传递给函数
foo3<string>("abc")
foo3<number>(11)
//方式2.通过类型推导,自动导出传入的变量类型
foo3("abc")
foo3(11)


//泛型的基本补充
// 可以传入多个类型
function foo4<T,E>(a1:T,a2:E){

}



// 平时在开发过程中看到一些常用的名称
// T    Type的缩写,类型
// K,V  key和value的缩写,键值对
// E element的缩写,元素
// O object缩写,对象
